import { CacheStore } from './storage';

/**
 * 首字母大写
 * @param {*} str
 */
export function firstWordToUpperCase(str) {
  return str.replace(str[0], str[0].toUpperCase());
}

/**
 * 缓存代理
 * @param {*} name 需要代理的字段
 * @param {*} cacheRender 缓存渲染方法
 * @param {*} asyncRender 请求渲染方法
 */
export function proxyCache(name, cacheRender, asyncRender) {
  const cache = {};
  return function (key) {
    return new Promise(resolve => {
      if (key in cache) {
        cacheRender(cache, key, name);
        resolve();
      } else {
        asyncRender(cache, key, name).then(data => {
          cache[key] = data;
          cacheRender(cache, key, name);
          resolve({
            cache,
            key,
            name,
            data
          });
        });
      }
    });
  };
}

/**
 * 缓存store
 */
export const cacheStore = new CacheStore();

/**
 * 数组是否包含某值
 * @param {*} arr 数组
 * @param {*} val 需要查找的值
 */
export function contains(arr, val) {
  return arr.includes(val);
}

/**
 * 数组对象查找某个值
 * @param {*} arr 数组对象 [{key: 'val'}, ...]
 * @param {*} key 对象的关键字
 * @param {*} val 需要查找的值
 */
export function deepContains(arr, key, val) {
  return arr.find(item => item[key] === val);
}

/**
 * 删除数组中某一项
 * @param {*} arr 数组
 * @param {*} index 索引
 */
export function removeItem(arr, index) {
  return arr.splice(index, 1);
}

/**
 * 最大值
 * @param {*} arr 数组
 */
export function max(arr) {
  return Math.max.apply(null, arr);
}

/**
 * 最小值
 * @param {*} arr 数组
 */
export function min(arr) {
  return Math.min.apply(null, arr);
}
